#Boa:Dialog:Dialog1

import wx
import consultasBD
import utiles
from decimal import Decimal
import datetime
import sincronizar_tabla

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1COMBOBOX1, wxID_DIALOG1COMBOBOX2, 
 wxID_DIALOG1COMBOBOX3, wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
 wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, 
 wxID_DIALOG1STATICTEXT6, wxID_DIALOG1STATICTEXT7, wxID_DIALOG1STATICTEXT8, 
 wxID_DIALOG1STATICTEXT9, wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, 
 wxID_DIALOG1TEXTCTRL3, wxID_DIALOG1TEXTCTRL4, wxID_DIALOG1TEXTCTRL5, 
 wxID_DIALOG1TEXTCTRL6, wxID_DIALOG1TEXTCTRL7, 
] = [wx.NewId() for _init_ctrls in range(24)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(66, 137), size=wx.Size(360, 245),
              style=wx.DEFAULT_DIALOG_STYLE, title='Objetivos')
        self.SetClientSize(wx.Size(352, 218))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Fecha (Anio/Mes)', name='staticText1', parent=self,
              pos=wx.Point(16, 16), size=wx.Size(84, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(16, 32),
              size=wx.Size(56, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnCambiaAnio,
              id=wxID_DIALOG1COMBOBOX1)

        self.comboBox2 = wx.ComboBox(choices=["01", "02", "03", "04", "05",
              "06", "07", "08", "09", "10", "11", "12"],
              id=wxID_DIALOG1COMBOBOX2, name='comboBox2', parent=self,
              pos=wx.Point(72, 32), size=wx.Size(40, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Bind(wx.EVT_COMBOBOX, self.OnCambiaMes,
              id=wxID_DIALOG1COMBOBOX2)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX3,
              name='comboBox3', parent=self, pos=wx.Point(120, 32),
              size=wx.Size(136, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.Bind(wx.EVT_COMBOBOX, self.OnCambiarSucursal,
              id=wxID_DIALOG1COMBOBOX3)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Buscar',
              name='button3', parent=self, pos=wx.Point(264, 32),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_DIALOG1BUTTON3)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Objetivo 1', name='staticText2', parent=self,
              pos=wx.Point(16, 112), size=wx.Size(50, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL6, name='textCtrl6',
              parent=self, pos=wx.Point(16, 128), size=wx.Size(24, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='10')

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(56, 128), size=wx.Size(72, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Objetivo 2', name='staticText3', parent=self,
              pos=wx.Point(144, 112), size=wx.Size(50, 13), style=0)

        self.textCtrl7 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL7, name='textCtrl7',
              parent=self, pos=wx.Point(144, 128), size=wx.Size(24, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='20')

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(184, 128), size=wx.Size(72, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Calcular',
              name='button4', parent=self, pos=wx.Point(264, 128),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnCalcular,
              id=wxID_DIALOG1BUTTON4)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Guardar',
              name='button1', parent=self, pos=wx.Point(16, 184),
              size=wx.Size(75, 23), style=0)
        self.button1.Enable(False)
        self.button1.Bind(wx.EVT_BUTTON, self.OnGuardar, id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Salir',
              name='button2', parent=self, pos=wx.Point(264, 184),
              size=wx.Size(73, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON2)

        self.textCtrl3 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL3, name='textCtrl3',
              parent=self, pos=wx.Point(16, 80), size=wx.Size(80, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')
        self.textCtrl3.SetEditable(False)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='ventas', name='staticText4', parent=self, pos=wx.Point(16,
              64), size=wx.Size(33, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='ventas', name='staticText5', parent=self, pos=wx.Point(96,
              64), size=wx.Size(33, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL4, name='textCtrl4',
              parent=self, pos=wx.Point(96, 80), size=wx.Size(80, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')
        self.textCtrl4.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='ventas', name='staticText6', parent=self, pos=wx.Point(176,
              64), size=wx.Size(33, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL5, name='textCtrl5',
              parent=self, pos=wx.Point(176, 80), size=wx.Size(80, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')
        self.textCtrl5.SetEditable(False)

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='Sucursal', name='staticText7', parent=self,
              pos=wx.Point(120, 16), size=wx.Size(40, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_DIALOG1STATICTEXT8, label='%',
              name='staticText8', parent=self, pos=wx.Point(168, 128),
              size=wx.Size(11, 13), style=0)

        self.staticText9 = wx.StaticText(id=wxID_DIALOG1STATICTEXT9, label='%',
              name='staticText9', parent=self, pos=wx.Point(40, 128),
              size=wx.Size(11, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.llenarCombo()

    def llenarCombo(self):
        anioActual = utiles.getfecha()[-4:]
        anioAnterior = str(int(anioActual)-1)
        anioAnterior2 = str(int(anioActual)-2)
        self.comboBox1.Append(anioAnterior2)
        self.comboBox1.Append(anioAnterior)
        self.comboBox1.Append(anioActual)
        self.comboBox1.SetSelection(2)
        self.comboBox2.SetSelection(datetime.date.today().month-1)
        SQL = "SELECT nombre FROM sucursales "
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox3.Append(item["nombre"])
        sucursal = utiles.getSucursalActiva()
        self.comboBox3.SetSelection(int(sucursal)-1)

        self.comboBox1.SetEditable(False)
        self.comboBox2.SetEditable(False)
        self.comboBox3.SetEditable(False)

    def limpiar(self):
        self.textCtrl1.SetLabel("0.00")
        self.textCtrl2.SetLabel("0.00")
        self.textCtrl3.SetLabel("0.00")
        self.textCtrl4.SetLabel("0.00")
        self.textCtrl5.SetLabel("0.00")
        self.comboBox1.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def totalFacturado(self,anio,mes,indice):
        inicio = anio+"-"+mes+"-01 00:00:00"
        fin = anio+"-"+mes+"-31 23:59:59"
        r1 = "SELECT SUM(totalfactura) FROM ventas "
        r2 = "WHERE fecha BETWEEN '"+inicio+"' AND '"+fin+"' "
        sql = r1+r2
        resultado = consultasBD.ordenCrudaRemota(sql,indice)
        if resultado==None or resultado==() or len(resultado)==0:
            resultado = 0
        else:
            try:
                resultado = resultado[0][0][0]
            except:
                print "Error en la lectura"
                resultado = 0
        return resultado

    def OnCambiaMes(self, event):
        self.limpiar()

    def OnCambiaAnio(self, event):
        self.limpiar()

    def OnCambiarSucursal(self, event):
        self.limpiar()
        
    def buscarObjetivos(self,anio,mes,sucursal):
        r1 = "SELECT objetivo1,objetivo2 FROM objetivos "
        r2 = "WHERE fecha='"+anio+mes+"' AND sucursal='"+sucursal+"' "
        sql = r1+r2
        resultado = consultasBD.ordenCrudaDict(sql)
        if resultado==None or resultado==() or len(resultado)==0:
            return True,resultado
        return False,resultado

    def OnBuscar(self, event):
        anioActual = self.comboBox1.GetLabel()
        anioAnter1 = str(int(anioActual)-1)
        anioAnter2 = str(int(anioActual)-2)
        mes = self.comboBox2.GetLabel()
        sucursal = self.comboBox3.GetSelection()
        self.limpiar()
        if sucursal<0:
            utiles.mensaje(None,"Debe indicar la sucursal")
            self.comboBox3.SetFocus()
            return
        
        self.staticText4.SetLabel("ventas "+anioAnter2)
        self.staticText5.SetLabel("ventas "+anioAnter1)
        self.staticText6.SetLabel("ventas "+anioActual)
        
        self.textCtrl5.SetLabel(str(self.totalFacturado(anioActual,mes,sucursal)))
        self.textCtrl4.SetLabel(str(self.totalFacturado(anioAnter1,mes,sucursal)))
        self.textCtrl3.SetLabel(str(self.totalFacturado(anioAnter2,mes,sucursal)))

        sucursal = str(sucursal+1)
        self.nuevo,resultado = self.buscarObjetivos(anioActual,mes,sucursal)
        
        if not self.nuevo:
            print "Cargando datos"
            objetivo1 = resultado[0]["objetivo1"]
            objetivo2 = resultado[0]["objetivo2"]
            self.textCtrl1.SetLabel(str(objetivo1))
            self.textCtrl2.SetLabel(str(objetivo2))
        self.button1.Enable(True)
        self.textCtrl1.SetFocus()

    def OnGuardar(self, event):
        try:
            objetivo1 = Decimal(self.textCtrl1.GetLabel())
        except:
            utiles.mensaje(None,"Debe ingresar un valor numerico")
            self.textCtrl1.SetFocus()
            return
        try:
            objetivo2 = Decimal(self.textCtrl2.GetLabel())
        except:
            utiles.mensaje(None,"Debe ingresar un valor numerico")
            self.textCtrl2.SetFocus()
            return
        self.button1.Enable(False)

        fecha = self.comboBox1.GetLabel()+self.comboBox2.GetLabel()
        sucursal = str(self.comboBox3.GetSelection()+1)
        objetivo1 = self.textCtrl1.GetLabel()
        objetivo2 = self.textCtrl2.GetLabel()
        
        if self.nuevo:
            r1 = "INSERT INTO objetivos(fecha,sucursal,objetivo1,objetivo2) "
            r2 = "VALUES('%s','%s','%s','%s')" % (fecha,sucursal,objetivo1,objetivo2)
            sql = r1+r2
        else:
            r1 = "UPDATE objetivos SET objetivo1='"+objetivo1+"',objetivo2='"+objetivo2+"' "
            r2 = "WHERE fecha='"+fecha+"' AND sucursal='"+sucursal+"' "
            sql = r1+r2
        
        try:
            consultasBD.begin()
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)        
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["objetivos"])
            self.limpiar()
        except:
            utiles.mensaje(None,"Error en la grabacion\nReintente mas tarde")
            print "Error en la sincronizacion y grabacion"

    def OnCalcular(self, event):
        try:
            porcentaje1 = Decimal(self.textCtrl6.GetLabel())
        except:
            porcentaje1 = 0
        try:
            porcentaje2 = Decimal(self.textCtrl7.GetLabel())
        except:
            porcentaje2 = 0
        ventasanioanterior = Decimal(self.textCtrl4.GetLabel()).quantize(Decimal("0.00"))
        aux1 = Decimal(str(ventasanioanterior+ventasanioanterior*porcentaje1/100))
        aux1 = aux1.quantize(Decimal("0.10"))
        aux1 = str(aux1)
        aux2 = Decimal(str(ventasanioanterior+ventasanioanterior*porcentaje2/100))
        aux2 = aux2.quantize(Decimal("0.10"))
        aux2 = str(aux2)
        self.textCtrl1.SetLabel(aux1)
        self.textCtrl2.SetLabel(aux2)
        self.button1.SetFocus()
